let http = require('http')
let querystring = require('querystring')
let url = require('url')
let fs = require('mz/fs')
let path = require('path')


let mime = require('mime');
//localStorage  5M, 一直存在，不能跨域 存储在浏览器
// sessionStorage 不关浏览器就存活
// cookie 存储在浏览器，每次请求时候都会带上cookie. 一般存放不敏感信息，不能跨域设置cookie
// 可以一级域名和二级域名通用。默认最大4K
// cookie 可以前端也可以后端设置，后端可以设置前端是否可以更改。
// session 存储在服务器端 比较安全。（session是基于cookie）
// 注册登录大致流程 默认登录后，给你一个卡号或者 标识
// 每次请求时候回自动带上cookie，我可以去通过sesssion找到当前账号对赢得内容。（一般存在内存）
// redis / mongo 存在数据库中
class Server {
  async handRequest(req, res) {
    let {pathname} = url.parse(req.url, true);
    let absPath = path.join(__dirname, pathname);
    // this.processInterface();

    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:63342');// 有cookie时候不能是*
    res.setHeader('Access-Control-Allow-Methods', 'OPTIONS,PUT,GET,POST,DELETE,PATCH');// 有cookie时候不能是*
    res.setHeader('Access-Control-Allow-Headers', 'token,Content-Type');// 有cookie时候不能是*
    res.setHeader('Access-Control-Max-Age', 10);
    res.setHeader('Access-Control-Allow-Credentials', true);

    let method = req.method.toLowerCase();
    if (method==='options'){
      console.log('可以访问我')
      res.end();
    }
    // switch (pathname) {
    //   case '/userList':
    //     if (method === 'get') {
    //       res.end(JSON.stringify({name: 'zb'}));
    //       return;
    //
    //     }
    //     if (method === 'put') {
    //       res.end(JSON.stringify({name: 'zb'}));
    //       return;
    //
    //     }
    //     break;
    //   default:
    //     return;
    //
    //
    // }
    try {
      let statObj = await fs.stat(absPath);
      if (statObj.isDirectory()) {
        let realPath = path.join(absPath, 'index.html');
        console.log(realPath)
        await fs.access(realPath);
        this.sendFile(realPath, res);
      } else {
        this.sendFile(absPath, res)
      }
    } catch (e) {
      console.log(e);
      this.sendError(res, e);
    }
  }

  sendError(res, err) {
    res.statusCode = 404;
    res.end(`404 not found`)

  }

  sendFile(path, res) {
    res.setHeader('Content-Type', mime.getType(path) + ';charset=utf-8')
    fs.createReadStream(path).pipe(res);
  }

  start(port) {
    let server = http.createServer(this.handRequest.bind(this));
    server.listen(port);
  }
}

let server = new Server();
server.start(3000);
//
// let server = http.createServer((req,res)=>{
//   let {pathname} = url.parse(req.url,true);
//   console.log(pathname);
//   let absPath = path.join(__dirname,pathname)
//   fs.stat(absPath,(err,statObj)=>{
//     if (err){
//       res.statusCode=404;
//       res.end('not fond');
//       return;
//     }
//     if (statObj.isFile()){
//       // fs.readFile(absPath,(err,data)=>{
//       //
//       // })
//
//       res.setHeader('Content-Type',mime.getType(absPath)+';charset=utf-8')
//       fs.createReadStream(absPath).pipe(res);
//
//     } else {
//       console.log('你访问的是 /')
//       let realPath = path.join(absPath,'index.html');
//       fs.access(realPath,(err)=>{
//         if (err){
//           res.statusCode=404;
//           res.end('not fond');
//           return;
//         }
//       });
//       res.setHeader('Content-Type',mime.getType(realPath)+';charset=utf-8')
//
//       fs.createReadStream(realPath).pipe(res);
//     }
//   })
//
// });
//
// fs.stat(path.resolve(__dirname,'index.html'),function (err, statObj) {
//   console.log(statObj.isDirectory())
//   console.log(statObj.isFile())
// })
// server.listen(3000,()=>{
//   console.log('start  port 3000')
// });
